package yourapp.expense.util;  // 放在 util 包里，和你的其他工具类放一起

import java.util.ArrayList;
import java.util.List;

// 这个类就是个“解析小助手”，专门帮你把数据库返回的文本拆开
public class ExpenseTextParser {

  // ====== 解析单个函数的返回文本（比如 GetExpensesByPaymentAppId 返回的文本） ======
  public static List<SimpleExpense> parseExpenseText(String text) {
    List<SimpleExpense> expenses = new ArrayList<>();

    if (text == null || text.startsWith("没有找到")) {
      return expenses; // 如果没找到，返回空列表
    }

    // 按 "\n" 分割每一条记录（比如数据库返回多条，用换行符隔开）
    String[] lines = text.split("\n");
    for (String line : lines) {
      if (line.trim().isEmpty()) continue; // 跳过空行

      // 按 " | " 分割每一部分（比如 "支出ID:1 | 金额:10.0 | 日期:2024-01-01 | ..."）
      String[] parts = line.split(" \\| ");
      if (parts.length < 4) continue; // 如果分割后不够4部分，跳过（防止出错）

      try {
        // 解析每一部分（简单粗暴，按顺序取值）
        String idStr = parts[0].replace("支出ID:", "").trim();
        String amountStr = parts[1].replace("金额:", "").trim();
        String dateStr = parts[2].replace("日期:", "").trim();
        String descStr = parts[3].replace("描述:", "").trim();

        // 这里你可以用 String 存，或者转成 数字/日期（根据你的需求）
        SimpleExpense expense = new SimpleExpense();
        expense.setId(idStr);       // 支出ID（字符串，懒得转数字了）
        expense.setAmount(amountStr); // 金额（字符串，懒得转数字了）
        expense.setDate(dateStr);     // 日期（字符串，懒得转日期了）
        expense.setDescription(descStr); // 描述

        expenses.add(expense);
      } catch (Exception e) {
        // 如果解析出错，跳过这一行（打印错误信息，方便调试）
        System.err.println("解析出错: " + line);
        e.printStackTrace();
      }
    }
    return expenses;
  }

  // ====== 一个简单的类，用来存解析后的每一条支出记录（可扩展） ======
  public static class SimpleExpense {
    private String id;          // 支出ID（字符串）
    private String amount;      // 金额（字符串）
    private String date;        // 日期（字符串）
    private String description; // 描述

    // Getter 和 Setter（简单版，你也可以用 public 字段）
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }

    public String getAmount() { return amount; }
    public void setAmount(String amount) { this.amount = amount; }

    public String getDate() { return date; }
    public void setDate(String date) { this.date = date; }

    public String getDescription() { return description; }
    public void setDescription(String description) { this.description = description; }

    @Override
    public String toString() {
      return "SimpleExpense{id='" + id + "', amount='" + amount + "', date='" + date + "', description='" + description + "'}";
    }
  }
}